;Mostrar una secuencia por el puerto D, capturando un orden de secuencia por el puerto B y duración de timer por el puerto C

	list p=16f877
	include "p16f877.inc"	

	__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _WRT_ENABLE_ON & _XT_OSC & _DEBUG_OFF & _CPD_OFF & _LVP_OFF

;-------------declaraciones----------------
umbral equ 7Ah

;-------------inicio programa----------------

	org	0h
	goto	inicio
	org	5h 

;-------------Fin de programa----------------

;puerto de salida del estado ON/OF
conf_port_c
	banksel TRISC
	movlw	0x00
	movwf	TRISC	
	return

;puerto de entrada del umbral
conf_port_b
	banksel TRISB
	movlw	0xff
	movwf	TRISB	
	return



;Configuracion del retardo
conf_t1con
	banksel	T1CON	
	clrf	T1CON
	clrf	TMR1H
	clrf	TMR1L
	clrf	PIR1
	movlw	0x30
	movwf	T1CON	
	bsf	T1CON,TMR1ON
	return

;---------------------Generacion del reloj(200Mz)-----------------------
;--------------------------No se está utilizando---------------------
delay_clock
	movlw	0xCA
	movwf	TMR1L
	movlw	0xF3
	movwf	TMR1H	
retardo_reloj
	btfss	PIR1,TMR1IF
	goto	retardo_reloj
	bcf	PIR1,TMR1IF
	return
;--------------------------------------------------------------------
;-------------------------ADCON0-------------------------------------------
;(bit7)0 = Left justified
;(bit 3-0) :Port Configuration Control bits:---->Vref+=Vdd, Vref-=Vss

;-------------------------ADCON0---------------------------------------------
;(bit 7-6)10 = FOSC/32
;(bit 5-3)000 = channel 0, (RA0/AN0)

;--------------------------------confg de la conversion----------------------
conf_ad
	bsf	STATUS, RP0	;sel banco1
	clrf	ADCON1
	bcf	STATUS, RP0	;sel banco0
	movlw	0x81 
	movwf	ADCON0	
	return
;-----------------------Imprimir el estado ON/OF---------------------

;--------------------------No se está utilizando---------------------
escribir
	banksel	PORTC		
	clrf	PORTC		
	;movf	valor,W		
	movwf	PORTC		
	return
;---------------------------------------------------------------------

leer_umbral
	banksel	PORTB		
	movf	PORTB,W		
	movwf	umbral	
	return


inicio	
	call	conf_port_b	;Entrada del umbral
	call	conf_port_c	;Salida del estado ON/OF
	call	conf_ad
transforme	
	call	conf_t1con
	call	leer_umbral	
	bsf	ADCON0, GO
pruebe
	btfsc	ADCON0, GO	
	goto	pruebe
	movf	ADRESH, W
	subwf	umbral
	btfss	STATUS, C	;Si esta en set es porque W

    Source: geocities.com/tiger928rs/txt

               ( geocities.com/tiger928rs)